package com.yunji.product.service;

import cn.hutool.core.lang.Pair;
import com.yunji.common.model.cache.ProductBelongCacheDTO;
import com.yunji.common.model.cache.ProductCacheDTO;
import com.yunji.product.bo.ProductListQueryBO;
import com.yunji.product.bo.ProductSelectQueryBO;
import com.yunji.product.domain.ProductDO;
import com.yunji.product.vo.ProductVO;

import java.util.List;

/**
 * @Project: yunji-coffee
 * @Package com.yunji.product.service
 * @FileName IProductService.java
 * @Copyright Copyright © 2024 云集互联. All Rights Reserved
 * @Company com
 * @Version 1.0
 * @Since JDK1.8.0_201
 * @CreateTime 2024-04-01 23:38:08
 * @Description 商品信息接口
 * @Modification History
 * Author					History Time			Version			Description
 * -------------------------------------------------------------------------------
 * HuaAo				2024-06-10 23:38:08		1.0				1.0
 */
public interface IProductService {

    List<ProductDO> searchProductPrice(ProductListQueryBO bo);

    ProductBelongCacheDTO selectProductPrice(ProductSelectQueryBO bo);

    /**
     * @param productId 商品ID
     * @Title select
     * @Desc 查询商品详情
     * @Date 2024-08-29 18:32:28.324
     * @Return Product 商品详情
     */
    ProductDO select(Long productId);

    /**
     * @return boolean 新增结果
     * @Title create
     * @Desc 新增商品信息
     * @Date 2024-04-08 09:45:32
     * @Param product 商品信息
     */
    boolean create(ProductDO product);

    /**
     * @return boolean 更新结果
     * @Title update
     * @Desc 更新商品信息
     * @Date 2024-04-08 09:46:01
     * @Param product 商品信息
     */
    boolean update(ProductDO product);

    /**
     * @return boolean 批量删除结果
     * @Title delete
     * @Desc 批量删除商品信息
     * @Date 2024-04-08 09:46:21
     * @Param ids 需要删除的商品信息主键集合
     */
    boolean delete(Long... ids);

    /**
     * @param product 商品信息
     * @Title checkProductSKU
     * @Desc 校验商品SKU唯一
     * @Date 2024-06-11 17:34:59.308
     * @Return boolean 校验结果
     */
    boolean checkProductSKU(ProductVO product);

    /**
     * @param productTypeIds 产品类型ID数组
     * @Title statsOfProductType
     * @Desc 产品类型统计
     * @Date 2024-06-12 10:25:13.992
     * @Return int 统计结果
     */
    int statsOfProductType(Long... productTypeIds);

    int statsOfProductUnit(Long... unitIds);

    int statsOfProductBrand(Long... ids);

    Pair<String, String> getProductNameAndPics(Long productId);

    ProductCacheDTO getCacheById(Long productId);
}
